```html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>FastDFS 分布式文件系统详解 | 技术小馆</title>
    <link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css">
    <link rel="stylesheet" href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <style>
        body {
            font-family: 'Noto Sans SC', Tahoma, Arial, Roboto, "Droid Sans", "Helvetica Neue", "Droid Sans Fallback", "Heiti SC", "Hiragino Sans GB", Simsun, sans-serif;
            color: #333;
            line-height: 1.6;
            background-color: #f9fafb;
        }
        h1, h2, h3, h4 {
            font-family: 'Noto Serif SC', serif;
            font-weight: 600;
            color: #111;
        }
        .hero {
            background: linear-gradient(135deg, #1e3a8a 0%, #3b82f6 100%);
        }
        .card {
            transition: all 0.3s ease;
        }
        .card:hover {
            transform: translateY(-5px);
            box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
        }
        .highlight {
            position: relative;
            z-index: 1;
        }
        .highlight::before {
            content: '';
            position: absolute;
            bottom: 0;
            left: 0;
            width: 100%;
            height: 30%;
            background-color: rgba(59, 130, 246, 0.2);
            z-index: -1;
            transform: scaleX(0);
            transform-origin: left;
            transition: transform 0.3s ease;
        }
        .highlight:hover::before {
            transform: scaleX(1);
        }
        .drop-cap::first-letter {
            float: left;
            font-size: 4.5rem;
            line-height: 0.65;
            margin: 0.1em 0.1em 0.2em 0;
            color: #1e3a8a;
            font-weight: 700;
        }
        .diagram-container {
            background-color: #fff;
            border-radius: 0.5rem;
            padding: 2rem;
            box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
        }
        .code-block {
            background-color: #1e293b;
            color: #e2e8f0;
            border-radius: 0.375rem;
            padding: 1rem;
            font-family: monospace;
            overflow-x: auto;
        }
        .step-icon {
            width: 3rem;
            height: 3rem;
            border-radius: 50%;
            background-color: #3b82f6;
            color: white;
            display: flex;
            align-items: center;
            justify-content: center;
            font-weight: bold;
            margin-right: 1rem;
            flex-shrink: 0;
        }
        .timeline {
            position: relative;
            padding-left: 2rem;
        }
        .timeline::before {
            content: '';
            position: absolute;
            left: 0.5rem;
            top: 0;
            bottom: 0;
            width: 2px;
            background-color: #e2e8f0;
        }
        .timeline-item {
            position: relative;
            padding-bottom: 2rem;
        }
        .timeline-item::before {
            content: '';
            position: absolute;
            left: -2rem;
            top: 0;
            width: 1rem;
            height: 1rem;
            border-radius: 50%;
            background-color: #3b82f6;
            border: 2px solid white;
        }
    </style>
</head>
<body class="antialiased">
    <!-- Hero Section -->
    <section class="hero text-white py-20 px-4">
        <div class="container mx-auto max-w-6xl">
            <div class="flex flex-col md:flex-row items-center">
                <div class="md:w-1/2 mb-10 md:mb-0">
                    <h1 class="text-5xl font-bold mb-6 leading-tight">FastDFS <span class="text-blue-200">分布式文件系统</span></h1>
                    <p class="text-xl mb-8 opacity-90">高性能、可扩展的开源分布式文件存储解决方案</p>
                    <div class="flex space-x-4">
                        <a href="#what-is-fastdfs" class="bg-white text-blue-600 px-6 py-3 rounded-lg font-medium hover:bg-blue-50 transition duration-300">了解详情</a>
                        <a href="#docker-install" class="border border-white text-white px-6 py-3 rounded-lg font-medium hover:bg-white hover:text-blue-600 transition duration-300">Docker安装</a>
                    </div>
                </div>
                <div class="md:w-1/2">
                    <img src="https://cdn.nlark.com/yuque/0/2024/png/21449790/1709346816873-e529627a-fab8-4a14-b7ce-d2e7f4b8ebd8.png" alt="FastDFS架构图" class="rounded-lg shadow-2xl transform hover:scale-105 transition duration-500">
                </div>
            </div>
        </div>
    </section>

    <!-- Main Content -->
    <main class="container mx-auto max-w-6xl px-4 py-12">
        <!-- What is FastDFS Section -->
        <section id="what-is-fastdfs" class="mb-20">
            <div class="flex items-center mb-8">
                <div class="w-2 h-12 bg-blue-600 mr-4"></div>
                <h2 class="text-3xl font-bold">什么是FastDFS</h2>
            </div>
            
            <div class="drop-cap bg-white p-8 rounded-xl shadow-md mb-8">
                <p class="text-lg">FastDFS（Fast Distributed File System）是一个开源的分布式文件系统，用于解决大规模分布式存储系统中的文件存储和访问问题。它最初由淘宝开发，后来成为一个开源项目。FastDFS通常用于大规模的分布式文件存储场景，比如互联网公司的图片、音视频等文件存储需求。通过其分布式、高性能的特性，FastDFS能够满足对文件存储和访问的高要求。</p>
            </div>

            <div class="grid md:grid-cols-2 gap-8 mb-8">
                <div class="card bg-white p-6 rounded-xl shadow-md">
                    <div class="flex items-center mb-4">
                        <i class="fas fa-network-wired text-blue-500 text-2xl mr-3"></i>
                        <h3 class="text-xl font-semibold">分布式存储</h3>
                    </div>
                    <p>FastDFS采用分布式存储架构，将文件切分成小块，并在多个存储节点上存储这些块，实现文件的分布式存储。</p>
                </div>
                <div class="card bg-white p-6 rounded-xl shadow-md">
                    <div class="flex items-center mb-4">
                        <i class="fas fa-tachometer-alt text-blue-500 text-2xl mr-3"></i>
                        <h3 class="text-xl font-semibold">高性能</h3>
                    </div>
                    <p>FastDFS采用了轻量级的协议，支持高性能的文件上传和下载操作。它能够有效地处理大规模文件的存储和访问需求。</p>
                </div>
                <div class="card bg-white p-6 rounded-xl shadow-md">
                    <div class="flex items-center mb-4">
                        <i class="fas fa-expand text-blue-500 text-2xl mr-3"></i>
                        <h3 class="text-xl font-semibold">扩展性</h3>
                    </div>
                    <p>FastDFS的设计支持系统的水平扩展，可以方便地增加存储节点以应对系统容量的增长。</p>
                </div>
                <div class="card bg-white p-6 rounded-xl shadow-md">
                    <div class="flex items-center mb-4">
                        <i class="fas fa-balance-scale text-blue-500 text-2xl mr-3"></i>
                        <h3 class="text-xl font-semibold">负载均衡</h3>
                    </div>
                    <p>FastDFS支持负载均衡，可以通过在多个存储节点之间均匀分配文件，提高系统整体的性能和可靠性。</p>
                </div>
            </div>
        </section>

        <!-- Architecture Section -->
        <section id="architecture" class="mb-20">
            <div class="flex items-center mb-8">
                <div class="w-2 h-12 bg-blue-600 mr-4"></div>
                <h2 class="text-3xl font-bold">FastDFS架构</h2>
            </div>
            
            <div class="mb-8">
                <img src="https://cdn.nlark.com/yuque/0/2024/png/21449790/1709346836767-f8d72a45-dd11-4810-8d7f-ab01ce1aa971.png" alt="FastDFS架构图" class="w-full rounded-lg shadow-md">
            </div>
            
            <div class="grid md:grid-cols-2 gap-8">
                <div class="bg-white p-6 rounded-xl shadow-md">
                    <h3 class="text-xl font-semibold mb-4 flex items-center">
                        <span class="bg-blue-100 text-blue-600 px-3 py-1 rounded-full mr-3">Tracker Server</span>
                    </h3>
                    <p>FastDFS架构包括Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载，通过Trackerserver(跟踪服务器)调度最终由Storage server完成文件上传和下载。</p>
                    <p class="mt-4">Trackerserver作用是负载均衡和调度，通过Trackerserver在文件上传时可以根据一些策略找到Storageserver(储存服务器)提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。</p>
                </div>
                <div class="bg-white p-6 rounded-xl shadow-md">
                    <h3 class="text-xl font-semibold mb-4 flex items-center">
                        <span class="bg-blue-100 text-blue-600 px-3 py-1 rounded-full mr-3">Storage Server</span>
                    </h3>
                    <p>Storageserver作用是文件存储，客户端上传的文件最终存储在Storage服务器上，Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将storage称为存储服务器。</p>
                </div>
            </div>
        </section>

        <!-- Upload Flow Section -->
        <section id="upload-flow" class="mb-20">
            <div class="flex items-center mb-8">
                <div class="w-2 h-12 bg-blue-600 mr-4"></div>
                <h2 class="text-3xl font-bold">文件上传流程</h2>
            </div>
            
            <div class="mb-8">
                <img src="https://cdn.nlark.com/yuque/0/2023/png/21449790/1692181632482-32e0f5b9-c633-416b-99b1-6393aa040281.png" alt="文件上传流程图" class="w-full rounded-lg shadow-md">
            </div>
            
            <div class="timeline">
                <div class="timeline-item">
                    <div class="flex items-start">
                        <div class="step-icon">1</div>
                        <div>
                            <h3 class="text-xl font-semibold mb-2">选择tracker server</h3>
                            <p>当集群中不止一个tracker server时，由于tracker之间是完全对等的关系，客户端在upload文件时可以任意选择一个trakcer。</p>
                        </div>
                    </div>
                </div>
                
                <div class="timeline-item">
                    <div class="flex items-start">
                        <div class="step-icon">2</div>
                        <div>
                            <h3 class="text-xl font-semibold mb-2">选择存储的group</h3>
                            <p>当tracker接收到upload file的请求时，会为该文件分配一个可以存储该文件的group，支持如下选择group的规则：</p>
                            <ul class="list-disc pl-6 mt-2">
                                <li>Round robin，所有的group间轮询</li>
                                <li>Specified group，指定某一个确定的group</li>
                                <li>Load balance，剩余存储空间多多group优先</li>
                            </ul>
                        </div>
                    </div>
                </div>
                
                <div class="timeline-item">
                    <div class="flex items-start">
                        <div class="step-icon">3</div>
                        <div>
                            <h3 class="text-xl font-semibold mb-2">选择storage server</h3>
                            <p>当选定group后，tracker会在group内选择一个storage server给客户端，支持如下选择storage的规则：</p>
                            <ul class="list-disc pl-6 mt-2">
                                <li>Round robin，在group内的所有storage间轮询</li>
                                <li>First server ordered by ip，按ip排序</li>
                                <li>First server ordered by priority，按优先级排序（优先级在storage上配置）</li>
                            </ul>
                        </div>
                    </div>
                </div>
                
                <div class="timeline-item">
                    <div class="flex items-start">
                        <div class="step-icon">4</div>
                        <div>
                            <h3 class="text-xl font-semibold mb-2">选择storage path</h3>
                            <p>当分配好storage server后，客户端将向storage发送写文件请求，storage将会为文件分配一个数据存储目录，支持如下规则：</p>
                            <ul class="list-disc pl-6 mt-2">
                                <li>Round robin，多个存储目录间轮询</li>
                                <li>剩余存储空间最多的优先</li>
                            </ul>
                        </div>
                    </div>
                </div>
                
                <div class="timeline-item">
                    <div class="flex items-start">
                        <div class="step-icon">5</div>
                        <div>
                            <h3 class="text-xl font-semibold mb-2">生成Fileid</h3>
                            <p>选定存储目录之后，storage会为文件生一个Fileid，由storage server ip、文件创建时间、文件大小、文件crc32和一个随机数拼接而成，然后将这个二进制串进行base64编码，转换为可打印的字符串。</p>
                        </div>
                    </div>
                </div>
                
                <div class="timeline-item">
                    <div class="flex items-start">
                        <div class="step-icon">6</div>
                        <div>
                            <h3 class="text-xl font-semibold mb-2">选择两级目录</h3>
                            <p>当选定存储目录之后，storage会为文件分配一个fileid，每个存储目录下有两级256*256的子目录，storage会按文件fileid进行两次hash（猜测），路由到其中一个子目录，然后将文件以fileid为文件名存储到该子目录下。</p>
                        </div>
                    </div>
                </div>
                
                <div class="timeline-item">
                    <div class="flex items-start">
                        <div class="step-icon">7</div>
                        <div>
                            <h3 class="text-xl font-semibold mb-2">生成文件名</h3>
                            <p>当文件存储到某个子目录后，即认为该文件存储成功，接下来会为该文件生成一个文件名，文件名由group、存储目录、两级子目录、fileid、文件后缀名（由客户端指定，主要用于区分文件类型）拼接而成。</p>
                        </div>
                    </div>
                </div>
            </div>
            
            <div class="mt-8">
                <img src="https://cdn.nlark.com/yuque/0/2023/png/21449790/1692181632770-748da5d0-e0e1-46e0-bb0e-6391b51a119b.png" alt="文件名组成" class="w-full rounded-lg shadow-md">
            </div>
        </section>

        <!-- Principle Section -->
        <section id="principle" class="mb-20">
            <div class="flex items-center mb-8">
                <div class="w-2 h-12 bg-blue-600 mr-4"></div>
                <h2 class="text-3xl font-bold">FastDFS原理</h2>
            </div>
            
            <div class="mb-8">
                <img src="https://cdn.nlark.com/yuque/0/2024/png/21449790/1709346905790-35eded28-2d77-4d74-8753-e4edecb25d9c.png" alt="FastDFS原理图" class="w-full rounded-lg shadow-md">
            </div>
            
            <div class="bg-white p-8 rounded-xl shadow-md">
                <p class="mb-4">存储节点采用了分组（group）的方式。存储系统由一个或多个group组成，group与group之间的文件是相互独立的，所有group的文件容量累加就是整个存储系统中的文件容量。</p>
                <p class="mb-4">一个group可以由一台或多台存储服务器组成，一个group下的存储服务器中的文件都是相同的，group中的多台存储服务器起到了冗余备份和负载均衡的作用。在group中增加服务器时，同步已有的文件由系统自动完成，同步完成后，系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时，可以动态添加group。只需要增加一台或多台服务器，并将它们配置为一个新的group，这样就扩大了存储系统的容量。</p>
                <p>FastDFS只有两个角色：Tracker server和Storage server。Tracker server作为中心结点，其主要作用是负载均衡和调度。Tracker server在内存中记录分组和Storage server的状态等信息，不记录文件索引信息，占用的内存量很少。</p>
            </div>
        </section>

        <!-- Docker Installation Section -->
        <section id="docker-install" class="mb-20">
            <div class="flex items-center mb-8">
                <div class="w-2 h-12 bg-blue-600 mr-4"></div>
                <h2 class="text-3xl font-bold">Docker安装FastDFS</h2>
            </div>
            
            <div class="grid md:grid-cols-2 gap-8 mb-8">
                <div class="bg-white p-6 rounded-xl shadow-md">
                    <h3 class="text-xl font-semibold mb-4 flex items-center">
                        <i class="fas fa-search text-blue-500 mr-2"></i> 用Docker搜索FastDFS相关镜像
                    </h3>
                    <div class="code-block">
                        docker search fastdfs
                    </div>
                </div>
                
                <div class="bg-white p-6 rounded-xl shadow-md">
                    <h3 class="text-xl font-semibold mb-4 flex items-center">
                        <i class="fas fa-download text-blue-500 mr-2"></i> 拉取相关镜像
                    </h3>
                    <div class="code-block">
                        docker pull ygqygq2/fastdfs-nginx
                    </div>
                </div>
                
                <div class="bg-white p-6 rounded-xl shadow-md">
                    <h3 class="text-xl font-semibold mb-4 flex items-center">
                        <i class="fas fa-server text-blue-500 mr-2"></i> 运行tracker服务
                    </h3>
                    <div class="code-block">
                        docker run -d --network=host --name tracker -v /usr/local/fdfs/tracker:/var/fdfs ygqygq2/fastdfs-nginx tracker
                    </div>
                    <p class="mt-4 text-sm text-gray-600">说明: --network=host表示容器和宿主机共享同一个网络和端口。</p>
                </div>
                
                <div class="bg-white p-6 rounded-xl shadow-md">
                    <h3 class="text-xl font-semibold mb-4 flex items-center">
                        <i class="fas fa-database text-blue-500 mr-2"></i> 运行storage服务
                    </h3>
                    <div class="code-block">
                        docker run -d --network=host --name storage0 -e TRACKER_SERVER=192.168.189.137:22122 -v /usr/local/fdfs/storage0:/var/fdfs ygqygq2/fastdfs-nginx storage
                    </div>
                    <p class="mt-4 text-sm text-gray-600">因为storage中Nginx默认端口号是8080,我们宿主机中已有一个tomcat启动,所以导致nginx启动失败，解决办法修改Ngxin的端口为80，然后进入到storage容器启动nginx。</p>
                </div>
            </div>
            
            <div class="bg-white p-6 rounded-xl shadow-md mb-8">
                <h3 class="text-xl font-semibold mb-4 flex items-center">
                    <i class="fas fa-redo text-blue-500 mr-2"></i> 第二次启动tracker和srorage服务
                </h3>
                <div class="space-y-4">
                    <div>
                        <p class="font-medium mb-2">1. 先查询以往运行过的所有容器，找到这个两个服务</p>
                        <div class="code-block">
                            docker ps -a
                        </div>
                    </div>
                    
                    <div>
                        <p class="font-medium mb-2">2. 找到对应的对应的服务后，根据ID启动</p>
                        <div class="code-block">
                            docker start a8da2539e996
                        </div>
                    </div>
                    
                    <div>
                        <p class="font-medium mb-2">3. 如有需要进入到容器中进行相关操作</p>
                        <div class="code-block">
                            docker exec -i -t a8da2539e996 /bin/bash
                        </div>
                    </div>
                </div>
            </div>
        </section>

        <!-- SpringBoot Integration Section -->
        <section id="springboot-integration" class="mb-20">
            <div class="flex items-center mb-8">
                <div class="w-2 h-12 bg-blue-600 mr-4"></div>
                <h2 class="text-3xl font-bold">SpringBoot整合FastDFS</h2>
            </div>
            
            <div class="bg-white p-6 rounded-xl shadow-md mb-8">
                <h3 class="text-xl font-semibold mb-4 flex items-center">
                    <i class="fas fa-code text-blue-500 mr-2"></i> 添加依赖
                </h3>
                <div class="code-block">
                    &lt;dependency&gt;<br>
                    &nbsp;&nbsp;&lt;groupId&gt;com.github.tobato&lt;/groupId&gt;<br>
                    &nbsp;&nbsp;&lt;artifactId&gt;fastdfs-client&lt;/artifactId&gt;<br>
                    &nbsp;&nbsp;&lt;version&gt;1.26.1-RELEASE&lt;/version&gt;<br>
                    &lt;/dependency&gt;
                </div>
            </div>
            
            <div class="bg-white p-6 rounded-xl shadow-md mb-8">
                <h3 class="text-xl font-semibold mb-4 flex items-center">
                    <i class="fas fa-cog text-blue-500 mr-2"></i> 导入配置
                </h3>
                <div class="code-block">
                    @SpringBootApplication(scanBasePackages = "com.ts")<br>
                    @Import(FdfsClientConfig.class)<br>
                    @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)<br>
                    public class ShopBackApplication {<br>
                    &nbsp;&nbsp;public static void main(String[] args) {<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;SpringApplication.run(ShopBackApplication.class, args);<br>
                    &nbsp;&nbsp;}<br>
                    }
                </div>
            </div>
            
            <div class="bg-white p-6 rounded-xl shadow-md mb-8">
                <h3 class="text-xl font-semibold mb-4 flex items-center">
                    <i class="fas fa-file-alt text-blue-500 mr-2"></i> application.properties中配置
                </h3>
                <div class="code-block">
                    #上传的超时时间<br>
                    fdfs.connect-timeout=10000<br>
                    #连接超时时间<br>
                    fdfs.so-timeout=10000<br>
                    #缩略图生成参数<br>
                    fdfs.thumb-image.height=100<br>
                    fdfs.thumb-image.width=100<br><br>
                    
                    #TrackerList参数,支持多个<br>
                    fdfs.tracker-list[0]=192.168.189.137:22122<br><br>
                    
                    #FastDFS服务器的路径<br>
                    fastdfspath=http://192.168.189.137:8080/
                </div>
            </div>
            
            <div class="bg-white p-6 rounded-xl shadow-md">
                <h3 class="text-xl font-semibold mb-4 flex items-center">
                    <i class="fas fa-upload text-blue-500 mr-2"></i> 上传文件Controller
                </h3>
                <div class="code-block">
                    @Controller<br>
                    public class CommonController {<br><br>
                    
                    &nbsp;&nbsp;@Value("${fastdfspath}")<br>
                    &nbsp;&nbsp;private String fastdfspath;<br><br>
                    
                    &nbsp;&nbsp;@Autowired<br>
                    &nbsp;&nbsp;private FastFileStorageClient ffsc;<br><br>
                    
                    &nbsp;&nbsp;@ResponseBody<br>
                    &nbsp;&nbsp;@RequestMapping(value = "/uploadFile")<br>
                    &nbsp;&nbsp;public String uploadFile(MultipartFile file){<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;System.out.println(file);<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;//截取源图片的后缀<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;String originalFilename = file.getOriginalFilename();<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;int index = originalFilename.lastIndexOf(".");<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;String houzhui = originalFilename.substring(index + 1);<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;String uploadFile = "";<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;try {<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StorePath storePath = ffsc.uploadImageAndCrtThumbImage(file.getInputStream(), file.getSize(), houzhui, null);<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uploadFile = storePath.getFullPath();<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;}catch (Exception e){<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;}<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;System.out.println("file:"+fastdfspath+uploadFile);<br>
                    &nbsp;&nbsp;&nbsp;&nbsp;return fastdfspath+uploadFile;<br>
                    &nbsp;&nbsp;}<br>
                    }
                </div>
            </div>
        </section>

        <!-- FAQ Section -->
        <section id="faq" class="mb-20">
            <div class="flex items-center mb-8">
                <div class="w-2 h-12 bg-blue-600 mr-4"></div>
                <h2 class="text-3xl font-bold">FastDFS常见问题</h2>
            </div>
            
            <div class="bg-white p-6 rounded-xl shadow-md">
                <div class="mb-6">
                    <img src="https://cdn.nlark.com/yuque/0/2023/png/21449790/1692181633186-4dee9816-7a14-4d8b-85df-e209501f67e5.png" alt="常见问题" class="w-full rounded-lg">
                </div>
                <h3 class="text-xl font-semibold mb-4">FastDFS上传文件找不到节点或文件错误</h3>
                <p>修改tracker和storage容器中分配空间的大小为100MB，然后从起容器。该文件在/etf/fdfs/tracker.conf中</p>
            </div>
        </section>
    </main>

    <!-- Footer -->
    <footer class="bg-gray-900 text-white py-8 px-4">
        <div class="container mx-auto max-w-6xl">
            <div class="flex flex-col md:flex-row justify-between items-center">
                <div class="mb-4 md:mb-0">
                    <h3 class="text-xl font-bold">技术小馆</h3>
                </div>
                <div>
                    <a href="http://www.yuque.com/jtostring" class="text-blue-300 hover:text-white transition duration-300">
                        <i class="fas fa-globe mr-2"></i> http://www.yuque.com/jtostring
                    </a>
                </div>
            </div>
        </div>
    </footer>

    <script src="https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js"></script>
    <script>
        mermaid.initialize({
            startOnLoad: true,
            theme: 'default',
            flowchart: {
                useMaxWidth: false,
                htmlLabels: true,
                curve: 'basis'
            }
        });
    </script>
</body>
</html>
```